home *** CD-ROM | disk | FTP | other *** search
-
- { Redirect MIDI channel data in a
- Track Data Block to a new channel
- }
- procedure change_chan(var tdi,tdo:track_data_block;
- old_chan,new_chan:byte);
- begin
- reset_track_data(tdi);
- reset_track_data(tdo);
- while not(tdi.edat) do
- begin
- next_track_event(tdi);
- with tdi.curr do
- begin
- if (event_type = MIDI_RS) and
- (midi_chan(running_status) = old_chan) then
- event.mess[1]:=((event.mess[1] and $F0) or new_chan);
- store_track_event(tdo,tdi.curr);
- end;
- end;
- end;
-
- { Extract a single MIDI channel from a Track Data Block
- }
- procedure extract_chan(var tdi,tdo:track_data_block;
- chan:byte);
- begin
- reset_track_data(tdi);
- reset_track_data(tdo);
- while not(tdi.edat) do
- begin
- next_track_event(tdi);
- with tdi.curr do
- begin
- if (event_type in [MIDI_RS,MIDI])
- and (midi_chan(running_status) <> chan) then
- begin { convert to NOP }
- event_type:=MARK;
- event_len:=2;
- event.mess[1]:=NOP;
- end;
- end;
- store_track_event(tdo,tdi.curr);
- end;
- end;
-
- { Filter a MIDI channel from a Track Data Block
- }
- procedure filter_chan(var tdi,tdo:track_data_block; chan:byte);
- begin
- reset_track_data(tdi);
- reset_track_data(tdo);
- while not(tdi.edat) do
- begin
- next_track_event(tdi);
- with tdi.curr do
- begin
- if (event_type in [MIDI_RS, MIDI])
- and (midi_chan(running_status) = chan) then
- begin { convert to NOP }
- event_type:=MARK;
- event_len:=2;
- event.mess[1]:=NOP;
- end;
- end;
- store_track_event(tdo,tdi.curr);
- end;
- end;
-
- event_type:=MARK;
- event_len:=2;
- event.mess[1]:=NOP;
- end;
- end;
- store_track_event(tdo,tdi.cu